(o´▽`o)ノ
嗨,我是wec,今天是Day 3。
給定一個整數數組 nums
和一個目標值 target
,請在這個數組中找到兩個和為目標值的數字,並返回它們的索引。
第1步: 直接先依序遍歷nums
中的所有數字。
第2步: 然後對每個數字,檢查它和後面所有的數字相加後是不是等於我們要的結果。
程式碼:
def two_sum(nums, target)
(0...nums.length).each do |i|
((i + 1)...nums.length).each do |j|
return [i, j] if nums[i] + nums[j] == target
end
end
end
第1步: 遍歷nums
中的所有數字,並把他們與他們的索引(位置)儲存到雜湊表裡。
第2步: 每次看到新數字就算一下「如果這個數字和另一個數字加起來要等於target
,那另一個數字是誰?」
第3步: 檢查另一數字是不是已經被存在雜湊表裡,如果是,就代表已經找到這兩數字了。
第4步: return兩個數字的索引。
程式碼:
def two_sum(nums, target)
hash = {}
nums.each_with_index do |num, index|
complement = target - num
if hash[complement]
return [hash[complement], index]
end
hash[num] = index
end
end
暴力拆解法: 時間複雜度為O(n²)
雜湊表: 時間複雜度為O(n)
➡️ 雜湊表雖然步驟看起來比較多一點,但時間複雜度可是遠遠勝過暴拆法ㄛ!雖然暴拆法也可以解決問題,不過如果遇到大組數時就毫無效率可言了๑•̀ㅂ•́)و✧。
那麼,以上就是今天的內容!
相信IT人動腦時都要吃點東西,所以今天邊寫邊吃鹹蛋黃酥跟柚子。
✧・゚祝大家中秋快樂!⋆⁺₊⋆ 🌕⋆⁺₊⋆
明天要說:Ruby精選刷題!練等要先從easy開始II(>∀・)⌒☆